<?php
Globals::requireClass('Table');
Globals::requireTable('Group');

class UserTable extends Table
{
	public static $defaultConfig = array(
		'table' => 'admin_user'
	);
	
	protected $groupTable;
	
	public function __construct($config = null)
	{
		parent::__construct($config);
		$this->groupTable = new GroupTable($config);
	}
	
	public function validate(array &$data)
	{
		if (array_key_exists($key = 'username', $data))
		{
			$data[$key] = strtolower(trim($data[$key]));
			
			if (!preg_match('/^[0-9a-z_]{3,16}$/', $data[$key]))
			{
				$this->message = '用户名无效，用户名由3-16位数字、小写字母以及下划线（_）组成。';
				return false;
			}
			
			if ($this->mode === parent::MODE_ADD)
			{
				$row = $this->getRow(array($key => $data[$key]));
				
				if ($row)
					Globals::error('用户名已被使用，请使用其他用户名。');
			}
		}
		
		if (array_key_exists($key = 'password', $data))
		{
			if (!preg_match('/^[0-9a-z]{6,16}$/i', $data[$key]))
			{
				$this->message = '密码无效，密码由6-16位数字、字母（区分大小写）组成。';
				return false;
			}
			
			if ($this->mode === parent::MODE_ADD || $this->mode === parent::MODE_MODIFY)
				$data[$key] = md5($data[$key]);
		}
		
		if (array_key_exists($key = 'groupid', $data))
		{
			$data[$key] = intval($data[$key]);
			$row = $this->groupTable->getRow($data[$key]);
			
			if (!$row)
			{
				$this->message = '群组ID无效。';
				return false;
			}
		}
		
		return true;
	}
}

Config::extend('UserTable', 'Table');
